/**
 * 封装了部分常用js
 * @author huyw
 * @since 2018/12/12
 */
/**
 * 数据表格加载模板
 * @param {Object} tableDom 表格名
 * @param {Object} data 额外参数
 * @param {Object} url 接口名
 * @param {Object} dataCols 每一列的参数
 * @param {Object} donFunc 回调函数
 * @param {Object} isPage 开启分页
 */
function CommonLoadTable(tableDom, data, url, dataCols, donFunc, isPage) {
    layui.use(['form', 'table'], function () {
        var table = layui.table;
        layui.form.render('');
        var tableIns = table.render({

            // 表格基础参数 : http://www.layui.com/doc/modules/table.html#options
            elem: tableDom,
            where: data,
            loading: true,
            url: url, //数据接口
            method: 'GET',
            page: (isPage != undefined ? isPage : true), //开启分,
            limit: 20, //每页显示数量
            request: {
                pageName: 'pageNo', //页码的参数名称，默认：page
                limitName: 'pageSize' //每页数据量的参数名，默认：limit
            },
            response: {
                statusName: 'code', //数据状态的字段名称，默认：code
                statusCode: 0, //成功的状态码，默认：0
                msgName: 'msg', //状态信息的字段名称，默认：msg
                countName: 'total', //数据总数的字段名称，默认：count
                dataName: 'rows', //数据列表的字段名称，默认：data
            },
            cols: [dataCols],
            done: function (res, curr, count) {
                donFunc(tableIns, res, curr, count);
            }
        });
    });
}

/**
 * 通用获取数据列表（包括分页器）
 * @param {Object} interfaceName 接口名称
 * @param {Object} requestData 请求的参数
 * @param {Object} pageNo 页数
 * @param {Object} tmpListId  使用的模板对象id
 * @param {Object} listViewId 显示列表对象id
 * @param {Object} laypageId 分页对象id
 */
function CommonLoadList(interfaceName, requestData, pageNo, tmpListId, listViewId, laypageId) {
    //原先为page=pageNo
    var loadIndex = layer.load(3);
    //模板引擎
    var laytpl = layui.laytpl;
    var laypage = layui.laypage;
    var pageSize = 50;
    requestData.pageNo = pageNo;
    requestData.pageSize = pageSize;

    $.ajax({
        type: "GET",
        url: interfaceName,
        data: requestData,
        error: function (request) {
            layer.alert("网络超时");
        },
        success: function (data) {
            if (data.code == 0) {
                var getTpl = $("#" + tmpListId).html();
                laytpl(getTpl).render(data, function (htmlString) {
                    $("#" + listViewId).html(htmlString);
                });
                var total = data.total;
                if ($("#totalCount").length > 0)
                    $("#totalCount").html(total)
                laypage.render({
                    elem: laypageId,
                    count: total, //数据总数，从服务端得到
                    curr: pageNo,
                    limit: 50,
                    layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],
                    jump: function (obj, first) {
                        //obj包含了当前分页的所有参数，比如：
                        //console.log(obj.curr); //得到当前页，以便向服务端请求对应页的数据。
                        //console.log(obj.limit); //得到每页显示的条数
                        //首次不执行
                        if (!first) {
                            //console.log(obj.curr);
                            CommonLoadList(interfaceName, requestData, obj.curr, tmpListId, listViewId, laypageId);
                        }
                    }
                });
                setCheckBox();
            } else {
                layer.msg(data.msg, {
                    icon: 2
                });
            }
        }
    });
    setTimeout(function () {
        layer.close(loadIndex);
    }, 500);
}

function setCheckBox() {
    layui.form.render('checkbox');
    layui.form.on('checkbox(allChoose)', function (data) {
        var child = $(data.elem).parents('table').find('tbody tr td:first-child input[type="checkbox"]');
        child.each(function (index, item) {
            item.checked = data.elem.checked;
        });
        layui.form.render('checkbox');
    });
}

/**
 * 删除模板
 * @param {Object} id
 * @param {Object} url
 */
function CommonDelete(id, url) {
    layer.confirm("确定要删除选中的记录？", {
        btn: ['确认', '取消'],
        icon: 3,
        title: '消息'
    }, function (index, layero) {
        var p = {
            id: id
        };
        $.ajax({
            type: "POST",
            url: url + "/" + id,
            error: function (request) {
                layer.alert("网络超时");
            },
            success: function (data) {
                if (data.code == 0) {
                    layer.close(index); // 关闭对话框
                    getList({});
                    layer.msg('删除成功', {
                        icon: 1
                    });
                } else {
                    layer.msg(data.msg, {
                        icon: 2
                    });
                }
            }
        });
    }, function () {
    });
}

/**
 * 显示下拉框模板
 * @param {Object} id 属性值
 * @param {Object} url 接口
 * @param {Object} data 参数
 * @param {Object} name 返回参数名即数据库字段名
 * @param {returnId} returnId 返回参数id名即数据库字段id名
 */
function CommonSelect(id, url, data, name, returnId) {
    $.ajax({
        type: "GET",
        url: url,
        error: function (request) {
            layer.alert("网络超时");
        },
        success: function (data) {
            if (data.code == 0) {
                $("#" + id + "").find("option:gt(0)").remove();
                var list = data.rows;
                for (var i = 0; i < list.length; i++) {
                    //				if(rid==list[i].id){
                    //					$("#"+id+"").append('<option selected="selected" value="'+list[i].id+'">'+list[i][name]+'</option>');
                    //				}else{
                    $("#" + id + "").append('<option value="' + list[i][returnId] + '">' + list[i][name] + '</option>');
                    //				}
                    layui.use('form', function () {
                        layui.form.render('select');
                    });
                }
            } else {
                layer.msg(data.msg, {
                    icon: 2
                });
            }
        }
    });
}

/**
 * 数组去重
 * @param arr
 * @returns {Array}
 */
function uniqueArr(arr) {
    var hash = [];
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                ++i;
            }
        }
        hash.push(arr[i]);
    }
    return hash;
}

/**
 * 左侧导航区域（可配合layui已有的垂直导航）
 * @param url 菜单接口
 */
function leftNavigation(url) {
    console.log("url: "+url+" *****");
    $.get(url, function (data) {
        if (data != null) {
            //回显选中
            var ul = $("<ul class='layui-nav layui-nav-tree'></ul>");
            for (var i = 0; i < data.length; i++) {
                var node = data[i];
                //类型：0：目录；1：菜单；2：按钮
                if (node.type == 0 || node.type == 1) {
                    if (node.parentId == 0) {
                        var li = $("<li class='layui-nav-item layui-nav-itemed' flag='" + node.id + "'></li>");
                        //父级无page
                        var a = $("<a class='' href='javascript:;'><i class='layui-icon " + node.icon + "'></i>" + node.name + "</a>");
                        li.append(a);
                        //获取子节点
                        var childArry = getParentArry(node.id, data);
                        if (childArry.length > 0) {
                            a.append("<span class='layui-nav-more'></span>");
                            var dl = $("<dl class='layui-nav-child'></dl>");
                            for (var y in childArry) {
                                var dd = $("<dd><a lay-href='" + childArry[y].url + "'>" + childArry[y].name + "</a></dd>");
                                //判断选中状态
                                if (window.location.href.indexOf(childArry[y].url) > 0) {
                                    li.addClass("layui-nav-itemed");
                                    dd.addClass("layui-this")
                                }
                                /*TODO 由于layui菜单不是规范统一的，多级菜单需要手动更改样式实现；*/
                                dl.append(dd);
                            }
                            li.append(dl);
                        }
                        ul.append(li);
                    }
                }
            }
            $(".layui-side-scroll").append(ul);
        }

    });
}

/**
 * 根据菜单主键id获取下级菜单
 * @param id 菜单主键id
 * @param arry 菜单数组信息
 *
 * @returns {any[]}
 */
function getParentArry(id, arry) {
    var newArry = new Array();
    for (var x in arry) {
        if (arry[x].parentId == id)
            newArry.push(arry[x]);
    }
    return newArry;
}

/**
 * shiro权限按钮判断
 */
function shiroButton() {
    var html = '';
    if(update_shiro){
        html += '<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>';
    }
    if(del_shiro){
        html += '<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="deletex"><i class="layui-icon layui-icon-delete"></i>删除</a>';
    }
    return html;
}